/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package net.etrs.formathlon.persistance.formation;

import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.PersistenceException;
import net.etrs.formathlon.entity.formation.Domaine;
import net.etrs.formathlon.entity.formation.Formation;
import net.etrs.formathlon.persistance.utils.AbstractFacade;
import net.etrs.formathlon.persistance.utils.JpaRequestNames;
import net.etrs.formathlon.persistance.utils.PersistanceUtils;

/**
 * Facade pour la gestion de l'entité Domaine.
 * @author OPIF
 */
@Stateless
public class DomaineFacade extends AbstractFacade<Domaine> {

    @EJB
    private FormationFacade formationFacade;

    /**
     * En archivant un domaine on archive également ses formations.
     * @param t
     * @throws PersistenceException 
     */
    @Override
    public void delete(Domaine t) throws PersistenceException {
        super.delete(t);
        for (Formation formation : t.getListFormation()) {
            formationFacade.delete(formation);
        }
    }

    /**
     * Renvoie les formations dont la date de fin n'est pas spécifiée
     * ou que qu'elle est postérieur à aujourd'hui.
     * @param domaine
     * @return La liste de formation
     */
    public List<Formation> getFormationEnCours(Domaine domaine) {
        return getEm().createNamedQuery(JpaRequestNames.LISTE_FORMATION_EN_COURS_DOMAINE).setParameter("domaine", domaine).setParameter("date", PersistanceUtils.AUJOURDHUI).getResultList();
    }

    /**
     * Renvoie le nombre de formation qui sont en cours pour un domaine.
     * @param domaine
     * @return 
     */
    public int nbFormationEnCours(Domaine domaine) {
        return getFormationEnCours(domaine).size();
    }

    /**
     * Renvoie les domaines qui contiennent des formations.
     * Pour la saisie a posteriori.
     * @return La liste de domaine
     */
    public List<Domaine> getDomaineWithFormation() {
        return getEm().createNamedQuery(JpaRequestNames.LISTE_DOMAINE_WITH_FORMATION).getResultList();
    }
}
